# -*- coding: utf-8 -*-
# @Time : 2024/5/6 09:24
# @Author : Zxg
# @Email : 1473858993@qq.com
# @File : mysql_util.py
# @Project : Luckin_Finance_UI
import logging
import traceback

import pymysql


class Connect_Mysql:
    def __init__(self, dbuser='dev_test3', dbpwd='dev_test3', dbhost='10.218.2.12', dbport=3307):
        """
        重构方法，方便调用类变量，以及默认参数
        :param dbuser: 链接账号
        :param dbpwd: 链接密码
        :param dbhost: 链接域名
        :param dbport: 链接端口号
        """
        # 初始化成员变量
        self.result = []
        try:
            # 链接数据库
            self.conn = pymysql.Connection(user=dbuser, password=dbpwd, host=dbhost, port=dbport)
            # 创建游标
            self.cur = self.conn.cursor()  # 创建游标对象，用于执行SQL语句
        except pymysql.MySQLError as e:
            logging.exception('数据库链接失败:%s',str(e))
            self.conn = None
            self.cur = None

    def excute_query(self, db, sql):
        """
        执行sql语句，进行调用
        :param sql:sql语句
        :return:
        """
        if not self.conn or not self.cur:
            logging.error('数据库链接已关闭或未初始化')
            return
        try:
            # 使用库
            self.cur.execute('USE {}'.format(db))
            # 通过游标执行sql
            self.cur.execute(sql)
            # 对于修改或删除进行提交，一般select不用commit
            self.conn.commit()
            # 获取查询结果
            self.result = self.cur.fetchall()
        except pymysql.MySQLError as e:
            # 报错信息追加到日志中，中包含sql语句，执行异常，报错信息
            logging.exception(sql, '执行异常', str(e))
            # 报错详细信息追加日志
            logging.exception(traceback.format_exc())
            # 报错时回滚数据库事物，保证数据一致
            self.conn.rollback()

    def close_conn(self):
        """
        关闭链接数据库
        关闭游标链接
        :return:
        """
        if self.cur:
            self.cur.close()
        if self.conn:
            self.conn.close()


mysql_method = Connect_Mysql